Gvc may clean its device cache after we set up the device menu,
which can lead to failed assertions when using the "old" object
to later switch the device from a callback.
Make sure this doesn't happen by looking up the ID again from
the callback.
Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/7173
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3011>
? `${description} – ${origin}`
: description;
const item = new PopupMenu.PopupImageMenuItem(name, device.get_gicon());
- item.connect('activate', () => this._activateDevice(device));
+ item.connect('activate', () => {
+ const dev = this._lookupDevice(id);
+ if (dev)
+ this._activateDevice(dev);
+ else
+ console.warn(`Trying to activate invalid device ${id}`);
+ });
this._deviceSection.addMenuItem(item);
this._deviceItems.set(id, item);